package com.lure.base.statemachine;

/**
 * @author yanwei li create  2024-05-28 15:40
 */
public interface StateMachine<S, E, C> {

    /**
     * 验证是否可以在此状态上发生（fast fail 思想 ）
     */
    boolean verify(S sourceStateId,E event);

    /**
     * 状态机处理事件
     * @param sourceState 事件前的状态
     * @param event 事件
     * @param context 上下文
     * @return target State
     */
    S fireEvent(S sourceState,E event,C context);

    /**
     * 获取状态机 CODE
     */
    String getMachineId();

}
